package com.example.springboot.common;

import com.example.springboot.Exception.JwtInterceptorException;
import com.example.springboot.utils.AESUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 功能：接口统一返回包装类

 * 日期：2024/1/9 10:05
 */

@Data
@NoArgsConstructor
@Builder
public class Result {

    public static final String CODE_SUCCESS = "200";
    public static final String CODE_AUTH_ERROR = "401";
    public static final String CODE_SYS_ERROR = "500";

    /**
     * 状态码： 200    401     404     500
     * 意义：
     * 200：请求成功
     * 401：认证失败
     * 404：请求路径不存在
     * 500：系统错误
     */
    private String code;
    /**
     * 返回状态信息
     */
    private String msg;
    /**
     * 返回的数据
     */
    private Object data;

    private static String AESKey = "dianzishumaMall0";

    private static String AESIV = "dianzishumaMall0";


    public Result(String code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 请求成功 +  没有数据
     *
     * @return
     */
    public static Result success() {
        return new Result(CODE_SUCCESS, "请求成功", null);
    }

    /**
     * 请求成功 +  数据
     *
     * @return
     */
    public static Result success(Object data) {


        // 在这里实现对数据的加密
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString;
        String encryptAES;
        try {
            jsonString = objectMapper.writeValueAsString(data);
            encryptAES = AESUtil.encryptAES(jsonString, AESKey, AESIV);
        } catch (Exception e) {
            e.printStackTrace();
            throw new JwtInterceptorException("500", "数据加密失败");
        }

        return new Result(CODE_SUCCESS, "请求成功", encryptAES);
    }

    /**
     *  请求成功 +  成功信息
     * @return
     */
//    public static Result success(String msg) {
//        return new Result(CODE_SUCCESS, msg, null);
//    }

    /**
     * 请求成功 +  成功信息  +  数据
     *
     * @return
     */
    public static Result success(String msg, Object data) {


        // 在这里实现对数据的加密
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString;
        String encryptAES;
        try {
            jsonString = objectMapper.writeValueAsString(data);
            encryptAES = AESUtil.encryptAES(jsonString, AESKey, AESIV);
        } catch (Exception e) {
            throw new JwtInterceptorException("500", "数据加密失败");
        }

        return new Result(CODE_SUCCESS, msg, encryptAES);
    }


    /**
     * 请求失败 + 失败信息
     *
     * @param msg
     * @return
     */
    public static Result error(String msg) {
        return new Result(CODE_SYS_ERROR, msg, null);
    }

    /**
     * 请求失败 + 失败状态码 + 失败信息
     *
     * @param code
     * @param msg
     * @return
     */
    public static Result error(String code, String msg) {
        return new Result(code, msg, null);
    }

    /**
     * 系统错误
     *
     * @return
     */
    public static Result error() {
        return new Result(CODE_SYS_ERROR, "系统错误", null);
    }

}